SpringMVC 文件上传与SpringMVC拦截器
Contents
文件上传
为了能上传文件,必须将表单的method设为POST, 并将enctype设置为multipart/form-data,只有在这种情况下,浏览器才会把用户选择的文件二进制数据发送给服务器。
SpringMVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。
SpringMVC会将上传文件绑定到MultipartFile对象中。这个对象提供了上传文件内容,文件名等方法,通过transferTo()方法可以将文件存储在硬件中。
常用方法
1 | byte[] getBytes() //获取文件数据 |
SpringMVC 上下文默认没有装配MultipartResolver,因此默认情况下不能处理文件上传工作,若要使用,则需要配置。
1 | <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> |
拦截器
Interceptor拦截器的主要作用是拦截用户的请求并进行相应的处理,比如通过拦截器进行用户权限认证,判断用户是否登录等。
SpringMVC中的拦截器是拔插式设计,需要某个拦截器,只需在配置文件中应用该拦截器即可。
1 | <mvc:interceptors> |
HandlerInterceptor接口
SpringMVC中的拦截器请求通过实现HandlerInterceptor接口来完成,要定义一个拦截器,可以实现HandlerInterceptor接口,或者继承抽象类HandlerInterceptorAdapter。
HandlerInterceptor中定义了三个方法
1 | boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handle) |
请求处理前被调用,SpringMVC中的Interceptor 是链式调用,一个应用或者一个请求中可以同时存在多个Interceptor,每个Interceptor 根据声明顺序依次执行,preHandler的返回方法是布尔型的,返回false时,表示请求结束,后续的Interceptor和Controller都不会执行,返回值为true时,就会调用下一个Interceptor的prehandle方法,如果已经是最后一个Interceptor,就会调用当前请求的Controller方法。
1 | void postHandle(HttpServletRequest request,HttpServletResponse response,Object handle,ModelAndView mv) |
该方法和之后的afterCompletion都是只能在当前所属的Interceptor的preHandler方法的返回值为true时才会被调用。postHandler在Controller方法调用之后执行,但是会在DispatcherServlet 进行视图返回渲染之前被调用。所以可以对处理后的ModelAndView对象进行操作。先声明的Interceptor的postHandler反而后执行。
1 | void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handle,Exception exception) |
在渲染视图之后执行,方法的主要作用是进行资源清理。
Author: corn1ng
Link: https://corn1ng.github.io/2017/11/24/SpringMVC 文件上传/
License: 知识共享署名-非商业性使用 4.0 国际许可协议